{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Dependent density regression\n",
    "In another [example](dp_mix.ipynb), we showed how to use Dirichlet processes to perform Bayesian nonparametric density estimation.  This example expands on the previous one, illustrating dependent density regression.\n",
    "\n",
    "Just as Dirichlet process mixtures can be thought of as infinite mixture models that select the number of active components as part of inference, dependent density regression can be thought of as infinite [mixtures of experts](https://en.wikipedia.org/wiki/Committee_machine) that select the active experts as part of inference.  Their flexibility and modularity make them powerful tools for performing nonparametric Bayesian Data analysis."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running on PyMC3 v3.4.1\n"
     ]
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import pymc3 as pm\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from matplotlib import animation as ani, pyplot as plt\n",
    "import seaborn as sns\n",
    "from theano import shared, tensor as tt\n",
    "\n",
    "from IPython.display import HTML\n",
    "\n",
    "plt.style.use('seaborn-darkgrid')\n",
    "print('Running on PyMC3 v{}'.format(pm.__version__))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.rc('animation', writer='ffmpeg')\n",
    "blue, *_ = sns.color_palette()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "SEED = 972915 # from random.org; for reproducibility\n",
    "np.random.seed(SEED)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We will use the LIDAR data set from Larry Wasserman's excellent book, [_All of Nonparametric Statistics_](http://www.stat.cmu.edu/~larry/all-of-nonpar/).  We standardize the data set to improve the rate of convergence of our samples."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/io/parsers.py:2218: FutureWarning: split() requires a non-empty pattern match.\n",
      "  yield pat.split(line.strip())\n",
      "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/io/parsers.py:2220: FutureWarning: split() requires a non-empty pattern match.\n",
      "  yield pat.split(line.strip())\n"
     ]
    }
   ],
   "source": [
    "DATA_URI = 'http://www.stat.cmu.edu/~larry/all-of-nonpar/=data/lidar.dat'\n",
    "\n",
    "def standardize(x):\n",
    "    return (x - x.mean()) / x.std()\n",
    "\n",
    "df = (pd.read_csv(DATA_URI, sep=' *', engine='python')\n",
    "        .assign(std_range=lambda df: standardize(df.range),\n",
    "                std_logratio=lambda df: standardize(df.logratio)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>range</th>\n",
       "      <th>logratio</th>\n",
       "      <th>std_logratio</th>\n",
       "      <th>std_range</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>390</td>\n",
       "      <td>-0.050356</td>\n",
       "      <td>0.852467</td>\n",
       "      <td>-1.717725</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>391</td>\n",
       "      <td>-0.060097</td>\n",
       "      <td>0.817981</td>\n",
       "      <td>-1.707299</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>393</td>\n",
       "      <td>-0.041901</td>\n",
       "      <td>0.882398</td>\n",
       "      <td>-1.686447</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>394</td>\n",
       "      <td>-0.050985</td>\n",
       "      <td>0.850240</td>\n",
       "      <td>-1.676020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>396</td>\n",
       "      <td>-0.059913</td>\n",
       "      <td>0.818631</td>\n",
       "      <td>-1.655168</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   range  logratio  std_logratio  std_range\n",
       "0    390 -0.050356      0.852467  -1.717725\n",
       "1    391 -0.060097      0.817981  -1.707299\n",
       "2    393 -0.041901      0.882398  -1.686447\n",
       "3    394 -0.050985      0.850240  -1.676020\n",
       "4    396 -0.059913      0.818631  -1.655168"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We plot the LIDAR data below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x118213668>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(8, 6))\n",
    "\n",
    "ax.scatter(df.std_range, df.std_logratio,\n",
    "           c=blue);\n",
    "\n",
    "ax.set_xticklabels([]);\n",
    "ax.set_xlabel(\"Standardized range\");\n",
    "\n",
    "ax.set_yticklabels([]);\n",
    "ax.set_ylabel(\"Standardized log ratio\");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This data set has a two interesting properties that make it useful for illustrating dependent density regression.\n",
    "\n",
    "1. The relationship between range and log ratio is nonlinear, but has locally linear components.\n",
    "2. The observation noise is [heteroskedastic](https://en.wikipedia.org/wiki/Heteroscedasticity); that is, the magnitude of the variance varies with the range.\n",
    "\n",
    "The intuitive idea behind dependent density regression is to reduce the problem to many (related) density estimates, conditioned on fixed values of the predictors.  The following animation illustrates this intuition."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "fig, (scatter_ax, hist_ax) = plt.subplots(ncols=2, figsize=(16, 6))\n",
    "\n",
    "scatter_ax.scatter(df.std_range, df.std_logratio,\n",
    "                   c=blue, zorder=2);\n",
    "\n",
    "scatter_ax.set_xticklabels([]);\n",
    "scatter_ax.set_xlabel(\"Standardized range\");\n",
    "\n",
    "scatter_ax.set_yticklabels([]);\n",
    "scatter_ax.set_ylabel(\"Standardized log ratio\");\n",
    "\n",
    "bins = np.linspace(df.std_range.min(), df.std_range.max(), 25)\n",
    "\n",
    "hist_ax.hist(df.std_logratio, bins=bins,\n",
    "             color='k', lw=0, alpha=0.25,\n",
    "             label=\"All data\");\n",
    "\n",
    "hist_ax.set_xticklabels([]);\n",
    "hist_ax.set_xlabel(\"Standardized log ratio\");\n",
    "\n",
    "hist_ax.set_yticklabels([]);\n",
    "hist_ax.set_ylabel(\"Frequency\");\n",
    "\n",
    "hist_ax.legend(loc=2);\n",
    "\n",
    "endpoints = np.linspace(1.05 * df.std_range.min(), 1.05 * df.std_range.max(), 15)\n",
    "\n",
    "frame_artists = []\n",
    "\n",
    "for low, high in zip(endpoints[:-1], endpoints[2:]):\n",
    "    interval = scatter_ax.axvspan(low, high,\n",
    "                                  color='k', alpha=0.5, lw=0, zorder=1);\n",
    "    *_, bars = hist_ax.hist(df[df.std_range.between(low, high)].std_logratio,\n",
    "                            bins=bins,\n",
    "                            color='k', lw=0, alpha=0.5);\n",
    "    \n",
    "    frame_artists.append((interval,) + tuple(bars))\n",
    "    \n",
    "animation = ani.ArtistAnimation(fig, frame_artists,\n",
    "                                interval=500, repeat_delay=3000, blit=True)\n",
    "plt.close(); # prevent the intermediate figure from showing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<video width=\"1152\" height=\"432\" controls autoplay loop>\n",
       "  <source type=\"video/mp4\" src=\"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAACLHW1kYXQAAAKtBgX//6ncRem9\n",
       "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTQ4IHIyNzQ4IDk3ZWFlZjIgLSBILjI2NC9NUEVHLTQg\n",
       "QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE2IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv\n",
       "eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9\n",
       "MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm\n",
       "PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6\n",
       "b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9NiBsb29r\n",
       "YWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFj\n",
       "ZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJh\n",
       "bWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdl\n",
       "aWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49MiBzY2VuZWN1dD00MCBpbnRyYV9yZWZyZXNo\n",
       "PTAgcmNfbG9va2FoZWFkPTQwIHJjPWNyZiBtYnRyZWU9MSBjcmY9MjMuMCBxY29tcD0wLjYwIHFw\n",
       "bWluPTAgcXBtYXg9NjkgcXBzdGVwPTQgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAASl1liIQA\n",
       "Fv/+99M/zLLr9zm146j3op4mX0N1JQGblsTtOoAAAAMAAAMAAAMAAAVxrHCOXEcOH+g8AAADAAAf\n",
       "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\n",
       "HWRhdGEAAAABAAAAAExhdmY1Ny41Ni4xMDE=\n",
       "\">\n",
       "  Your browser does not support the video tag.\n",
       "</video>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "HTML(animation.to_html5_video())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we slice the data with a window sliding along the x-axis in the left plot, the empirical distribution of the y-values of the points in the window varies in the right plot.  An important aspect of this approach is that the density estimates that correspond to close values of the predictor are similar.\n",
    "\n",
    "In the previous example, we saw that a Dirichlet process estimates a probability density as a mixture model with infinitely many components.  In the case of normal component distributions,\n",
    "\n",
    "$$y \\sim \\sum_{i = 1}^{\\infty} w_i \\cdot N(\\mu_i, \\tau_i^{-1}),$$\n",
    "\n",
    "where the mixture weights, $w_1, w_2, \\ldots$, are generated by a [stick-breaking process](https://en.wikipedia.org/wiki/Dirichlet_process#The_stick-breaking_process).\n",
    "\n",
    "Dependent density regression generalizes this representation of the Dirichlet process mixture model by allowing the mixture weights and component means to vary conditioned on the value of the predictor, $x$.  That is,\n",
    "\n",
    "$$y\\ |\\ x \\sim \\sum_{i = 1}^{\\infty} w_i\\ |\\ x \\cdot N(\\mu_i\\ |\\ x, \\tau_i^{-1}).$$\n",
    "\n",
    "In this example, we will follow Chapter 23 of [_Bayesian Data Analysis_](http://www.stat.columbia.edu/~gelman/book/) and use a probit stick-breaking process to determine the conditional mixture weights, $w_i\\ |\\ x$.  The probit stick-breaking process starts by defining\n",
    "\n",
    "$$v_i\\ |\\ x = \\Phi(\\alpha_i + \\beta_i x),$$\n",
    "\n",
    "where $\\Phi$ is the cumulative distribution function of the standard normal distribution.  We then obtain $w_i\\ |\\ x$ by applying the stick breaking process to $v_i\\ |\\ x$.  That is,\n",
    "\n",
    "$$w_i\\ |\\ x = v_i\\ |\\ x \\cdot \\prod_{j = 1}^{i - 1} (1 - v_j\\ |\\ x).$$\n",
    "\n",
    "For the LIDAR data set, we use independent normal priors $\\alpha_i \\sim N(0, 5^2)$ and $\\beta_i \\sim N(0, 5^2)$.  We now express this this model for the conditional mixture weights using `pymc3`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def norm_cdf(z):\n",
    "    return 0.5 * (1 + tt.erf(z / np.sqrt(2)))\n",
    "\n",
    "def stick_breaking(v):\n",
    "    return v * tt.concatenate([tt.ones_like(v[:, :1]),\n",
    "                               tt.extra_ops.cumprod(1 - v, axis=1)[:, :-1]],\n",
    "                              axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING (theano.gof.cmodule): The same cache key is associated to different modules (/Users/jlao/.theano/compiledir_Darwin-17.5.0-x86_64-i386-64bit-i386-3.5.1-64/tmp6mq4zwxw and /Users/jlao/.theano/compiledir_Darwin-17.5.0-x86_64-i386-64bit-i386-3.5.1-64/tmprc22erpn). This is not supposed to happen! You may need to manually delete your cache directory to fix this.\n",
      "WARNING (theano.gof.cmodule): The same cache key is associated to different modules (/Users/jlao/.theano/compiledir_Darwin-17.5.0-x86_64-i386-64bit-i386-3.5.1-64/tmp6mq4zwxw and /Users/jlao/.theano/compiledir_Darwin-17.5.0-x86_64-i386-64bit-i386-3.5.1-64/tmprc22erpn). This is not supposed to happen! You may need to manually delete your cache directory to fix this.\n"
     ]
    }
   ],
   "source": [
    "N, _ = df.shape\n",
    "K = 20\n",
    "\n",
    "std_range = df.std_range.values[:, np.newaxis]\n",
    "std_logratio = df.std_logratio.values[:, np.newaxis]\n",
    "\n",
    "x_lidar = shared(std_range, broadcastable=(False, True))\n",
    "\n",
    "with pm.Model() as model:\n",
    "    alpha = pm.Normal('alpha', 0., 5., shape=K)\n",
    "    beta = pm.Normal('beta', 0., 5., shape=K)\n",
    "    v = norm_cdf(alpha + beta * x_lidar)\n",
    "    w = pm.Deterministic('w', stick_breaking(v))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We have defined `x_lidar` as a `theano` [`shared`](http://deeplearning.net/software/theano/library/compile/shared.html) variable in order to use `pymc3`'s posterior prediction capabilities later.\n",
    "\n",
    "While the dependent density regression model theoretically has infinitely many components, we must truncate the model to finitely many components (in this case, twenty) in order to express it using `pymc3`.  After sampling from the model, we will verify that truncation did not unduly influence our results.\n",
    "\n",
    "Since the LIDAR data seems to have several linear components, we use the linear models\n",
    "\n",
    "$$\n",
    "\\begin{align*}\n",
    "\\mu_i\\ |\\ x\n",
    "    & \\sim \\gamma_i + \\delta_i x \\\\\n",
    "\\gamma_i\n",
    "    & \\sim N(0, 10^2) \\\\\n",
    "\\delta_i\n",
    "    & \\sim N(0, 10^2)\n",
    "\\end{align*}\n",
    "$$\n",
    "\n",
    "for the conditional component means."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "with model:\n",
    "    gamma = pm.Normal('gamma', 0., 10., shape=K)\n",
    "    delta = pm.Normal('delta', 0., 10., shape=K)\n",
    "    mu = pm.Deterministic('mu', gamma + delta * x_lidar)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, we place the prior $\\tau_i \\sim \\textrm{Gamma}(1, 1)$ on the component precisions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "with model:\n",
    "    tau = pm.Gamma('tau', 1., 1., shape=K)\n",
    "    obs = pm.NormalMixture('obs', w, mu, tau=tau, observed=std_logratio)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now sample from the dependent density regression model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Sequential sampling (1 chains in 1 job)\n",
      "CompoundStep\n",
      ">Metropolis: [tau]\n",
      ">Metropolis: [delta]\n",
      ">Metropolis: [gamma]\n",
      ">Metropolis: [beta]\n",
      ">Metropolis: [alpha]\n",
      "100%|██████████| 30000/30000 [02:44<00:00, 182.90it/s]\n",
      "Only one chain was sampled, this makes it impossible to run some convergence checks\n"
     ]
    }
   ],
   "source": [
    "SAMPLES = 20000\n",
    "BURN = 10000\n",
    "\n",
    "with model:\n",
    "    step = pm.Metropolis()\n",
    "    trace = pm.sample(SAMPLES, step, chains=1, tune=BURN, random_seed=SEED)\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To verify that truncation did not unduly influence our results, we plot the largest posterior expected mixture weight for each component.  (In this model, each point has a mixture weight for each component, so we plot the maximum mixture weight for each component across all data points in order to judge if the component exerts any influence on the posterior.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x119470cf8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(8, 6))\n",
    "\n",
    "ax.bar(np.arange(K) + 1,\n",
    "       trace['w'].mean(axis=0).max(axis=0));\n",
    "\n",
    "ax.set_xlim(1 - 0.5, K + 0.5);\n",
    "ax.set_xticks(np.arange(0, K, 2) + 1);\n",
    "ax.set_xlabel('Mixture component');\n",
    "\n",
    "ax.set_ylabel('Largest posterior expected\\nmixture weight');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since only three mixture components have appreciable posterior expected weight for any data point, we can be fairly certain that truncation did not unduly influence our results.  (If most components had appreciable posterior expected weight, truncation may have influenced the results, and we would have increased the number of components and sampled again.)\n",
    "\n",
    "Visually, it is reasonable that the LIDAR data has three linear components, so these posterior expected weights seem to have identified the structure of the data well.  We now sample from the posterior predictive distribution to get a better understand the model's performance."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 5000/5000 [00:33<00:00, 151.39it/s]\n"
     ]
    }
   ],
   "source": [
    "PP_SAMPLES = 5000\n",
    "\n",
    "lidar_pp_x = np.linspace(std_range.min() - 0.05, std_range.max() + 0.05, 100)\n",
    "x_lidar.set_value(lidar_pp_x[:, np.newaxis])\n",
    "\n",
    "with model:\n",
    "    pp_trace = pm.sample_posterior_predictive(trace, PP_SAMPLES, random_seed=SEED)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Below we plot the posterior expected value and the 95% posterior credible interval."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x19e359dd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(8, 6))\n",
    "\n",
    "ax.scatter(df.std_range, df.std_logratio,\n",
    "           c=blue, zorder=10,\n",
    "           label=None);\n",
    "\n",
    "low, high = np.percentile(pp_trace['obs'], [2.5, 97.5], axis=0)\n",
    "ax.fill_between(lidar_pp_x, low, high,\n",
    "                color='k', alpha=0.35, zorder=5,\n",
    "                label='95% posterior credible interval');\n",
    "\n",
    "ax.plot(lidar_pp_x, pp_trace['obs'].mean(axis=0),\n",
    "        c='k', zorder=6,\n",
    "        label='Posterior expected value');\n",
    "\n",
    "ax.set_xticklabels([]);\n",
    "ax.set_xlabel('Standardized range');\n",
    "\n",
    "ax.set_yticklabels([]);\n",
    "ax.set_ylabel('Standardized log ratio');\n",
    "\n",
    "ax.legend(loc=1);\n",
    "ax.set_title('LIDAR Data');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The model has fit the linear components of the data well, and also accomodated its heteroskedasticity.  This flexibility, along with the ability to modularly specify the conditional mixture weights and conditional component densities, makes dependent density regression an extremely useful nonparametric Bayesian model.\n",
    "\n",
    "To learn more about depdendent density regression and related models, consult [_Bayesian Data Analysis_](http://www.stat.columbia.edu/~gelman/book/), [_Bayesian Nonparametric Data Analysis_](http://www.springer.com/us/book/9783319189673), or [_Bayesian Nonparametrics_](https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=bayesian+nonparametrics+book).\n",
    "\n",
    "This example first appeared [here](http://austinrochford.com/posts/2017-01-18-ddp-pymc3.html).\n",
    "\n",
    "Author: [Austin Rochford](https://github.com/AustinRochford/)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.1"
  },
  "widgets": {
   "state": {},
   "version": "1.1.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
